//
//  NSString+LHLDES.m
//  UI_24_加密
//
//  Created by 李昊林 on 16/8/16.
//  Copyright © 2016年 li cheng. All rights reserved.
//

#import "NSString+LHLDES.h"
#import <CommonCrypto/CommonCrypto.h>
#define key @"01234567"
@implementation NSString (LHLDES)
static Byte iv[] = {1,2,3,4,5,6,7,8};
- (NSString *)stringWithDES{
    //将字符串本身转成C字符串
    const char *string = [self UTF8String];
    //接受容器
    unsigned char byte[1024];
    //容器大小
    size_t dataOutMoved = 0;
    //4.DES加密过程
    //参数1：加密/解密
    //参数2：加密/解密 方式
    //参数3：分组密码选择
    //参数4：秘钥
    //参数5：key大小
    //参数6：向量
    //参数7：c的字符串
    //参数8：长度length
    //参数9：接受容器
    //参数10：容器大小
    //参数11：容器最终的个数
    CCCryptorStatus cryptorStatus = CCCrypt(kCCEncrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, string, strlen(string), byte, 1024, &dataOutMoved);
    //判断是否成功
    if (cryptorStatus == kCCSuccess) {
        NSData *desData = [NSData dataWithBytes:byte length:dataOutMoved];
        NSString *desBase64String = [desData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
        return desBase64String;
    }else {
        
        return @"DES加密失败";
    }
}
- (NSString *)desWithString{
    NSData *data = [[NSData alloc] initWithBase64EncodedString:self options:NSDataBase64DecodingIgnoreUnknownCharacters];
    const void *byte = data.bytes;
    unsigned char buffer[1024];
    size_t dataOutMoved = 0;
    CCCryptorStatus crypotorStatus = CCCrypt(kCCDecrypt, kCCAlgorithmDES, kCCOptionPKCS7Padding, [key UTF8String], kCCKeySizeDES, iv, byte, strlen(byte), buffer, 1024, &dataOutMoved);
    if (crypotorStatus ==kCCSuccess) {
        NSData *sourceData = [[NSData alloc] initWithBytes:buffer length:dataOutMoved];
        NSString *sourceString = [[NSString alloc] initWithData:sourceData encoding:NSUTF8StringEncoding];
        return sourceString;
    }else {
        return @"DES加密成功";
        
    }
}
@end
